package net.oxygen.upload;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import java.net.InetAddress;

/**
 * MinIO文件上传系统应用程序入口类
 * <p>
 * 该应用程序提供基于MinIO对象存储的文件上传功能，包括：
 * 1. 小文件直接上传
 * 2. 大文件分片上传
 * 3. 秒传功能
 * 4. 断点续传
 * 5. 文件管理等功能
 * </p>
 *
 * @author chenweiwei
 * @version 1.0
 * @since 2023-02-24
 */
@Slf4j
@ServletComponentScan
@SpringBootApplication
@EnableTransactionManagement
public class MinioUploadApplication {

    /**
     * 应用程序主入口方法
     * <p>
     * 启动Spring Boot应用并输出访问URL信息，包括：
     * - 本地访问地址
     * - 外部访问地址
     * - API文档地址
     * </p>
     *
     * @param args 命令行参数
     */
    @SneakyThrows
    public static void main(String[] args) {
        ConfigurableApplicationContext application = SpringApplication.run(MinioUploadApplication.class, args);
        Environment env = application.getEnvironment();
        log.info("\n----------------------------------------------------------\n\t" +
                "Application '{}' is running! Access URLs:\n\t" +
                "Local: \t\thttp://localhost:{}\n\t" +
                "External: \thttp://{}:{}\n\t" +
                "API文档: \thttp://{}:{}/doc.html\n" +
                "----------------------------------------------------------",
                env.getProperty("spring.application.name"),
                env.getProperty("server.port"),
                InetAddress.getLocalHost().getHostAddress(),
                env.getProperty("server.port"),
                InetAddress.getLocalHost().getHostAddress(),
                env.getProperty("server.port"));
    }

}
